package main

import (
	"fmt"
	"sort"
)

func main() {
	// 使用 make 创建 map
	m1 := make(map[string]int)
	fmt.Println(m1)

	// 试用 字面量 的形式创建 map
	m2 := map[string]int{
		"alice":   31,
		"charlie": 34,
	}
	fmt.Println(m2)

	// 修改 map 元素的 值
	m2["alice"] = 32
	fmt.Println(m2)

	// 删除 map 中的元素
	delete(m2, "alice")
	fmt.Println(m2)

	// 即使map中不存在“bob”下面的代码也可以正常工作
	m2["bob"] = m2["bob"] + 1
	fmt.Println(m2)

	//而且x += y和x++等简短赋值语法也可以用在map上
	m2["bob"] += 2
	fmt.Println(m2)

	m2["bob"]++
	fmt.Println(m2)

	fmt.Println("------------遍历------------")
	for k, v := range m2 {
		fmt.Println(k, " = ", v)
	}

	fmt.Println("------------排序遍历------------")
	names := getKeys(m2)
	sort.Strings(names)
	for _, k := range names {
		v := m2[k]
		fmt.Println(k, " = ", v)
	}

	fmt.Println("------------判断key是否存在------------")

	if val, ok := m2["bob"]; ok {
		fmt.Println("m2[\"bob\"] = ", val)
	}

}

func getKeys(m map[string]int) []string {
	j := 0
	keys := make([]string, len(m))
	for key, _ := range m {
		keys[j] = key
		j++
	}
	return keys
}
